package com.wyw.design.model.learning.behavioral.status.noStatus;

/**
 * @Title   修改后的电视机实现类
 * @Description
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/4/19 11:31
 * Update History:
 * Author        Time            Content
 */
public class Telev implements ITelevision {
    // 这里加入电视机的状态字段，构造中传入
    private TVStateEnum state;
    public Telev(TVStateEnum state) {
        this.state = state;
    }

    public TVStateEnum getState() {
        return state;
    }

    public void setState(TVStateEnum state) {
        this.state = state;
    }

    // 开机
    @Override
    public void powerOn() {
        switch (this.state) {
            // 待机状态
            case STANDBY_STATE:
                // 待机状态进行开机，没有任何效果，所以这里什么也不做，以下同理
                break;
            // 关机状态
            case POWER_OFF_STATE:
                // 关机状态进行开机，是允许的，开机之后默认属于standby待机状态
                System.out.println("开机...");
                this.setState(TVStateEnum.STANDBY_STATE);
                break;
            // 播放状态
            case PLAY_STATE:
                // 播放状态进行开机，没有任何效果，所以这里什么也不做，以下同理
                break;
            default:
                break;
        }
    }

    // 关机
    @Override
    public void powerOff() {
        switch (this.state) {
            // 待机状态 & 播放状态 都可以进行关机操作
            case STANDBY_STATE:
            case PLAY_STATE:
                System.out.println("关机...");
                this.setState(TVStateEnum.POWER_OFF_STATE);
                break;
            // 关机状态
            case POWER_OFF_STATE:
                break;
            default:
                break;
        }
    }

    // 播放
    @Override
    public void play() {
        switch (this.state) {
            // 待机状态
            case STANDBY_STATE:
                System.out.println("播放...");
                this.setState(TVStateEnum.PLAY_STATE);
                break;
            // 关机状态
            case POWER_OFF_STATE:
                break;
            // 播放状态
            case PLAY_STATE:
                break;
            default:
                break;
        }
    }

    // 待机
    @Override
    public void standby() {
        switch (this.state) {
            // 待机状态
            case STANDBY_STATE:
                break;
            // 关机状态
            case POWER_OFF_STATE:
                System.out.println("关机...");
                this.setState(TVStateEnum.POWER_OFF_STATE);
                break;
            // 播放状态
            case PLAY_STATE:
                System.out.println("待机...");
                this.setState(TVStateEnum.STANDBY_STATE);
                break;
            default:
                break;
        }
    }
}
